package top.loonglove.common.base.service;

import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;
import top.loonglove.common.base.entity.BaseEntity;
import top.loonglove.common.base.query.BasePageQuery;
import top.loonglove.common.base.query.BaseQuery;
import top.loonglove.common.base.result.PageResult;

/**
 * @author : xgl
 * @version : 0.0.1
 * @date :2021/7/26 4:49
 */
@Service
public interface BaseService<T extends BaseEntity,Q extends BaseQuery,PQ extends BasePageQuery> {
    /**
     * 添加数据
     * @param t 数据
     */
    void add(T t);

    /**
     * 删除数据，假删除
     * @param t 数据
     */
    void remove(T t);

    /**
     * 获取数据
     * @param q 查询项
     * @return 数据
     */
    T get(Q q);

    /**
     * 分页获取查询项
     * @param q extend BasePageQuery
     * @return 分页查询结果
     */
    PageResult<T> getPage(PQ q);

    /**
     * 修改数据
     * @param t 新数据
     */
    void modify(T t);

    /**
     * 删除数据，真删除
     * @param t 删除数据
     */
    @Deprecated
    void delete(T t);
}
